CC     = g++
BUILD_DIR = build

REQ_OBJS   = $(BUILD_DIR)/Matrix.o

TEST_OBJ = $(BUILD_DIR)/test.o
BIN_OBJ  = $(BUILD_DIR)/main.o

TEST_BIN = $(BUILD_DIR)/test
BIN    = $(BUILD_DIR)/main



all: $(BIN)

$(BUILD_DIR):
	mkdir $(BUILD_DIR)

$(BIN): $(REQ_OBJS) $(BIN_OBJ)
	$(CC) $(REQ_OBJS) $(BIN_OBJ) -o $(BIN)

$(BIN_OBJ): main.cpp $(BUILD_DIR)
	$(CC) -c main.cpp -o $(BUILD_DIR)/main.o

$(BUILD_DIR)/Matrix.o: Matrix.cpp $(BUILD_DIR)
	$(CC) -c Matrix.cpp -o $(BUILD_DIR)/Matrix.o

test: $(REQ_OBJS) $(TEST_OBJ)
	$(CC) $(REQ_OBJS) $(TEST_OBJ) -o $(TEST_BIN)

$(TEST_OBJ): $(BUILD_DIR)
	$(CC) -c test.cpp -o $(TEST_OBJ)

clean:
	rm -rf $(BUILD_DIR)

run: $(BIN)
	$(BIN)
